package logica.control;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
import logica.estructural.Artista;
import logica.estructural.Audio;
import logica.estructural.Cancion;
import logica.estructural.Formato;
import logica.estructural.Genero;
import logica.estructural.Lenguaje;
import logica.estructural.Video;
import presentacion.dialogo.Mensaje;

public class ProcesadorArchivoTxt implements Runnable{
	private File archivo;
	private String strLinea = "";
	private String rutaArchivoTxt;
	private String genero;
	private String lenguaje;
	private String forAudio;
	private String titAudio;
	private String forVideo;
	private String titVideo;
	private String titCan;
	private String nomArt;
	private String rutaVideo;
	private String rutaAudio;
	private static ArrayList<Artista> artistas = new ArrayList<Artista>();

	public ProcesadorArchivoTxt(String rutaArchivoTxt) {
		this.rutaArchivoTxt = rutaArchivoTxt;
		//artistas = new ArrayList<Artista>();

		genero = "";
		lenguaje = "";
		forAudio = "";
		titAudio = "";
		forVideo = "";
		titVideo = "";
		titCan = "";
		nomArt = "";
		rutaAudio = "";
		rutaVideo = "";
		
	}

	private void leerArchivo() {

		int numMaxTags = 0;
		archivo = new File(rutaArchivoTxt);

		try (BufferedReader flujo = new BufferedReader(new FileReader(archivo))) {
			while (!(strLinea = flujo.readLine().trim()).isEmpty()) {
				procesarLinea(strLinea);
				numMaxTags++;
				if (numMaxTags == 16)
					break;
			}
		} catch (IOException e) {
			new Mensaje("Se ha producido una excepcion: " + e.getMessage(),
					Mensaje.error);
		}

		nuevoArtista();

	}

	private void procesarLinea(String linea) {
		StringTokenizer tDosPuntos = new StringTokenizer(strLinea, ":");

		if (strLinea.startsWith("#TITLE:")) {
			tDosPuntos.nextToken();
			if (tDosPuntos.hasMoreTokens()) {
				titCan = tDosPuntos.nextToken();
			}

		} else if (strLinea.startsWith("#ARTIST:")) {
			tDosPuntos.nextToken();
			if (tDosPuntos.hasMoreTokens()) {
				nomArt = tDosPuntos.nextToken();
			}

		} else if (strLinea.startsWith("#LANGUAGE:")) {
			tDosPuntos.nextToken();
			if (tDosPuntos.hasMoreTokens()) {
				lenguaje = tDosPuntos.nextToken();
			}

		} else if (strLinea.startsWith("#GENRE:")) {
			tDosPuntos.nextToken();
			if (tDosPuntos.hasMoreTokens()) {
				genero = tDosPuntos.nextToken();
			}

		} else if (strLinea.startsWith("#MP3:")) {
			tDosPuntos.nextToken();
			if (tDosPuntos.hasMoreTokens()) {
				titAudio = tDosPuntos.nextToken();
				rutaAudio = (archivo.getParent() + "\\" + titAudio);
				StringTokenizer tForAud = new StringTokenizer(titAudio, ".");

				while (tForAud.hasMoreTokens()) {
					forAudio = tForAud.nextToken();
				}
			}

		} else if (strLinea.startsWith("#VIDEO:")) {
			tDosPuntos.nextToken();
			if (tDosPuntos.hasMoreTokens()) {
				titVideo = tDosPuntos.nextToken();
				rutaVideo = archivo.getParent() + "\\" + titVideo;
				StringTokenizer tForVid = new StringTokenizer(titVideo, ".");

				while (tForVid.hasMoreTokens()) {
					forVideo = tForVid.nextToken();
				}
			}
		}
	}

	private void nuevoArtista() {

		Artista art = new Artista(nomArt, new Cancion(titCan,
				new Genero(genero), new Lenguaje(lenguaje), new Video(titVideo,
						rutaVideo, new Formato(forVideo)), new Audio(titAudio,
						rutaAudio, new Formato(forAudio))));

		if (!art.getNomArt().isEmpty()) {
			addArtista(art);
		}

	}

	public synchronized static ArrayList<Artista> getArtistas() {
		return artistas;
	}
	
	private synchronized void addArtista(Artista art){
		artistas.add(art);
	}

	@Override
	public void run() {
		leerArchivo();
		Thread.yield();
	}

}
